package com.eshop.dao.provider;

import com.eshop.pojo.ProductInfo;
import org.apache.ibatis.jdbc.SQL;

import java.util.Map;

public class ProductInfoDynaSqlProvider {
    public String selectByPage(Map<String ,Object> param){ //分页获取商品信息
        String sql =  new SQL(){
            {
                SELECT("*");
                FROM("product_info");
                if (param.get("productInfo") != null){
                    ProductInfo productInfo = (ProductInfo) param.get("productInfo");
                    if (productInfo.getCode() != null && !productInfo.getCode().equals("")){
                        WHERE("code = #{ productInfo.code }");//?? #{ productInfo.getCode() }
                    }
                    if (productInfo.getName() != null && !productInfo.getName().equals("")){
                        WHERE("name like concat('%',#{ productInfo.name },'%')");
                    }
                    if (productInfo.getBrand() != null && !productInfo.getBrand().equals("")){
                        WHERE("brand like concat('%',#{ productInfo.brand },'%')");
                    }
                    if (productInfo.getType() != null && productInfo.getType().getId() > 0){
                        WHERE("tid = #{productInfo.type.id}");
                    }
                    if (productInfo.getPriceFrom() > 0.0){
                        WHERE("price >= #{productInfo.priceFrom}");
                    }
                    if (productInfo.getPriceTo() > 0.0){
                        WHERE("price <= #{productInfo.priceTo}");
                    }
                }
            }
        }.toString();
        if (param.get("pager") != null){
            sql += " limit #{pager.firstLimitParam}, #{pager.perPageRows}";
        }                   //get?? 自动调用参数的get方法？
        //System.out.println(sql);//调试
        return sql;
    }

    public String count(Map<String ,Object> param){//根据条件查询商品总数
        return new SQL(){
            {
                SELECT("count(*)");
                FROM("product_info");
                if (param.get("productInfo") != null){
                    ProductInfo productInfo = (ProductInfo) param.get("productInfo");
                    if (productInfo.getCode() != null && !productInfo.getCode().equals("")){
                        WHERE("code = #{ productInfo.code }");//?? #{ productInfo.getCode() }
                    }
                    if (productInfo.getName() != null && !productInfo.getName().equals("")){
                        WHERE("name like concat('%',#{ productInfo.name },'%')");
                    }
                    if (productInfo.getBrand() != null && !productInfo.getBrand().equals("")){
                        WHERE("brand like concat('%',#{ productInfo.brand },'%')");
                    }
                    if (productInfo.getType() != null && productInfo.getType().getId() > 0){
                        WHERE("tid = #{productInfo.type.id}");
                    }
                    if (productInfo.getPriceFrom() > 0.0){
                        WHERE("price >= #{productInfo.priceFrom}");
                    }
                    if (productInfo.getPriceTo() > 0.0){
                        WHERE("price <= #{productInfo.priceTo}");
                    }
                }
            }
        }.toString();
    }
}
